package com.navinfo.data.journal;

import com.google.gson.Gson;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVRecord;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.*;
import java.util.stream.Collectors;

/**
 * 车辆趟程发现概括版V4，及其平均运程计算
 * Model：去掉static方法，不进行功能2/5节点循环相同趟程的key合并(防止时间长计算错误)
 * 1.利用vertex的起止时间点进行趟程切分，不采用dfs算法
 * -2.进行趟程节点循环相同趟程的key合并
 * 3.使用瓦片/城市ID来jvs节点表
 * 4.尝试去掉趟程中短趟程（GPS偏移，大于LOAD_DISTANCE的行程才进行趟程计算）
 * -5.调整points序列String规则：以最小瓦片id开始
 */
public class VehicleJournalModelV5 {
    private static final Logger LOGGER = LoggerFactory.getLogger(VehicleJournalModelV5.class);

    /**
     * 运距阀值(米)
     */
    private static int LOAD_DISTANCE = 30*1000;
    /**
     * 瓦片级别
     */
    private static int ZOOM = 12;
    /**
     * JournalVertex集合
     */
    private List<JournalVertex> jvs = new ArrayList<JournalVertex>();
    /**
     * JournalEdge集合
     */
    private Map<String, JournalEdge> jes = new HashMap<String, JournalEdge>();

    /**
     * 根据经纬度获取瓦片ID
     *
     * @param lat 经度
     * @param lon 纬度
     * @return 瓦片ID
     */
    public long getLc(int lat, int lon) {
        Long tileIdMin = VehiclePassTimesQuadtree.getTileNumber(lat, lon, ZOOM);

        return tileIdMin;
    }

    /**
     * add or find SimilarVertex
     *
     * @param lat2 经度
     * @param lng2 维度
     * @param time 时间点
     * @param flag 0开始时间点，1结束时间点
     * @return list下标
     */
    private long afSimilarVertex(double lat2, double lng2, int time, int flag) {
        int result = -1;
        long id1 = getLc((int) (lat2 * 1000000), (int) (lng2 * 1000000));
        for (int i = 0; i < jvs.size(); i++) {
            JournalVertex jv = jvs.get(i);
            long id2 = jv.getTileNumber();
            if (id1 == id2) {
                jv.getTimelist().add(time + ":" + flag);
                jvs.set(i, jv);
                result = i;
                break;
            }
        }
        if (result == -1) {
            JournalVertex jv = new JournalVertex(id1);
            jv.getTimelist().add(time + ":" + flag);
            jv.setLat(lat2);
            jv.setLng(lng2);
            jvs.add(jv);
            result = jvs.size() - 1;
        }

        return id1;
    }

    /**
     * add or update JournalEdge
     */
    private void afJournalEdge(long src, long dst, int totalDistance, int routeStartTime, int routeEndTime,int vehicleEstimatedLoad) {
        String mapkey = src + "-" + dst;
        if (jes.containsKey(mapkey)) {
            JournalEdge je = jes.get(mapkey);
            je.setTimes(je.getTimes() + 1);
            je.setTotalDistance(je.getTotalDistance() + totalDistance);
            je.setTotalVehicleEstimatedLoad(je.getTotalVehicleEstimatedLoad()+vehicleEstimatedLoad);
            je.setTotalDuration(je.getTotalDuration() + (routeEndTime - routeStartTime));
            jes.put(mapkey, je);
        } else {
            JournalEdge je = new JournalEdge(src, dst, totalDistance, 1, routeEndTime - routeStartTime,vehicleEstimatedLoad);
            jes.put(mapkey, je);
        }
    }

    /**
     * 使用 Map按key进行排序
     *
     * @param map
     * @return
     */
    public Map<String, JournalDescV3> sortMapByKey(Map<String, JournalDescV3> map) {
        if (map == null || map.isEmpty()) {
            return new HashMap<String,JournalDescV3>();
        }

        Map<String, JournalDescV3> sortMap = new TreeMap<String, JournalDescV3>(new MapKeyComparator());
        sortMap.putAll(map);

        return sortMap;
    }

    /**
     * 判断是否存在已有的mapkey，如果存在返回map中的key，否则返回null
     *
     * @param journalDescV3Map
     * @param points
     * @return mapkey
     */
    private String getSameKeyFromMap(Map<String, JournalDescV3> journalDescV3Map, String points) {
        LOGGER.debug("---------------s------------------------");
        LOGGER.debug(points);
        LOGGER.debug("---------------m------------------------");
        for (Map.Entry<String, JournalDescV3> entry : journalDescV3Map.entrySet()) {
            LOGGER.debug("Key = " + entry.getKey() + ", Value = " + entry.getValue().toString());
        }
        LOGGER.debug("---------------e------------------------");
        String result = null;
        String[] pointArray = points.split("->");
        String[] newPointArray;
        newPointArray = Arrays.copyOfRange(pointArray, 0, pointArray.length - 1);
        LOGGER.debug("left:" + Arrays.toString(newPointArray));

        OUT:
        for (Map.Entry<String, JournalDescV3> entry : journalDescV3Map.entrySet()) {
//            LOGGER.info("Key = " + entry.getKey() + ", Value = " + entry.getValue().toString());
            String[] data = entry.getKey().split("->");
            if (pointArray.length != data.length) {
                continue;
            }
            String[] newData;
            newData = Arrays.copyOfRange(data, 0, data.length - 1);
            List list = new ArrayList(Arrays.asList(newData));
            for (int i = 0; i < list.size(); i++) {
                for (int j = 0; j < i; j++) {
                    String tmp = (String) list.get(0);
                    list.remove(0);
                    list.add(tmp);
                }
                Object[] c = list.toArray();
                LOGGER.debug("right:" + Arrays.toString(c));
                if (Arrays.equals(newPointArray, c)) {
                    result = entry.getKey();
                    break OUT;
                }
            }
        }
        LOGGER.debug("result:" + result);
        return result;
    }

    /**
     * 调整points序列String规则：以最小瓦片id开始
     *
     * @param points points序列String
     */
    private String transformPoints(String points) {
        String result= null;
        String[] pointArray = points.split("->");
        String[] newPointArray;
        newPointArray = Arrays.copyOfRange(pointArray, 0, pointArray.length - 1);

        List list = new ArrayList(Arrays.asList(newPointArray));
        long smallestPoint = Long.MAX_VALUE;
        for (int i = 0; i < list.size(); i++) {
            if (Long.parseLong((String) list.get(i))<smallestPoint) {
                smallestPoint = Long.parseLong((String) list.get(i));
            }
        }
        OUT2:
        for (int i = 0; i < list.size(); i++) {
            if (Long.parseLong((String) list.get(0))==smallestPoint) {
                break OUT2;
            }
            for (int j = 0; j < i; j++) {
                String tmp = (String) list.get(0);
                list.remove(0);
                list.add(tmp);
            }
        }

        list.add(String.valueOf(smallestPoint));
        result = StringUtils.join(list.toArray(), "->");
        LOGGER.debug(smallestPoint+"result:" + result);

        return result;
    }

    /**
     * 将趟程（各类节点顺序组合）放入journalDescV3Map
     *
     * @param journalDescV3Map
     * @param points
     * @param totalDistance
     * @param totalDuration
     */
    private void handleJournalDescV3(Map<String, JournalDescV3> journalDescV3Map, String points, int totalDistance, int totalDuration) {
        LOGGER.debug("totalDuration:" + totalDuration);
//            大于LOAD_DISTANCE的行程才进行趟程计算
        if (totalDistance <= LOAD_DISTANCE) {
            return;
        }

        if (journalDescV3Map.containsKey(points)) {
            JournalDescV3 jdv3 = journalDescV3Map.get(points);
            jdv3.setTcTimes(jdv3.getTcTimes() + 1);
            jdv3.setTotalDistance(jdv3.getTotalDistance() + totalDistance);
            jdv3.setTotalDuration(jdv3.getTotalDuration() + totalDuration);
            journalDescV3Map.put(points, jdv3);
        } else {
            JournalDescV3 jdv3 = new JournalDescV3(points, totalDuration, totalDistance, 1);
            journalDescV3Map.put(points, jdv3);
        }
    }

    /**
     * 依据行程记录生成趟程记录
     *
     * @param tid 车辆TID
     * @param tripRawRecordList 行程记录
     * @return 趟程记录BEAN
     */
    public VehicleJournalBean  generateJournal(String tid, List<TripRawRecord> tripRawRecordList) {
        VehicleJournalBean vehicleJournalBean = new VehicleJournalBean();
        tripRawRecordList.sort(Comparator.comparingInt(TripRawRecord::getRouteStartTime));
        List<TripRecord> tripRecordList = new ArrayList<TripRecord>();
        for (TripRawRecord record : tripRawRecordList) {
            double routeStartLatitude = ((double)record.getRouteStartLatitude()) / 1000000;
            double routeStartLongitude = ((double)record.getRouteStartLongitude())/1000000;
            double routeEndLatitude = ((double)record.getRouteEndLatitude()) / 1000000;
            double routeEndLongitude = ((double)record.getRouteEndLongitude()) / 1000000;
            int routeIntegralMileage = (record.getRouteIntegralMileage());
            int routeStartTime = (record.getRouteStartTime());
            int routeEndTime = (record.getRouteEndTime());
            int vehicleEstimatedLoad = (record.getVehicleEstimatedLoad());

            long src = afSimilarVertex(routeStartLatitude, routeStartLongitude, routeStartTime, 0);
            long dst = afSimilarVertex(routeEndLatitude, routeEndLongitude, routeEndTime, 1);
            afJournalEdge(src, dst, routeIntegralMileage, routeStartTime, routeEndTime,vehicleEstimatedLoad);

            tripRecordList.add(new TripRecord(src, dst, routeIntegralMileage, routeStartTime, routeEndTime));
        }
        //read trip data end------------------------

        LOGGER.debug("-----------打印所有行程记录--------------");
        for (int j = 0; j < tripRecordList.size(); j++) {
            LOGGER.debug(tripRecordList.get(j).toString());
        }

        LOGGER.debug("-----------打印所有趟程停靠点--------------");
        Map<String, JournalDescV3> journalDescV3Map = new HashMap<String, JournalDescV3>();
        int num = 0;
        long lastNum = -1;//上一点标号
        for (JournalVertex jv : jvs) {
            LOGGER.debug("Number:" + num + ", " + jv.toString());
            long currentNode = jv.getTileNumber();

            List<String> timelist = jv.getTimelist();
            int totalDuration = 0;
            int totalDistance = 0;
//            int tcTimes = 0;//趟程次数
            int durationFlag = 0;//趟程标志
            int computeFlag = 0;//计算标志
            int durationStartTime = 0;
            int durationEndTime = 0;
            StringBuffer points = new StringBuffer();
            for (int i = 0; i < timelist.size(); i++) {
                if (durationFlag == 0) {//尚无趟程
                    if (Integer.parseInt(timelist.get(i).split(":")[1]) == 0) {//判断是起始时间点
                        durationStartTime = Integer.parseInt(timelist.get(i).split(":")[0]);
                        durationFlag = 1;
                    }
                }
                if (durationFlag == 1) {//存在趟程
                    if (Integer.parseInt(timelist.get(i).split(":")[1]) == 1) {//判断是结束时间点
                        durationEndTime = Integer.parseInt(timelist.get(i).split(":")[0]);
                        durationFlag = 2;
//                        tcTimes++;//趟程次数
                    }
                }

                if (durationFlag == 2) {
                    //存在趟程可以开始计算运程和时长
                    LOGGER.debug("durationStartTime:" + durationStartTime + "durationEndTime:" + durationEndTime);
                    totalDuration = durationEndTime - durationStartTime;
                    for (int j = 0; j < tripRecordList.size(); j++) {
                        TripRecord tr = tripRecordList.get(j);

                        if ((currentNode == tr.getSrc()) && (durationStartTime == tr.getRouteStartTime())) {
                            computeFlag = 1;
                        }

                        if (computeFlag == 1) {
                            if (lastNum == -1) {
                                points.append(tr.getSrc()).append("->");
                                lastNum = tr.getSrc();
                            } else {
                                if (lastNum != tr.getSrc()) {
                                    points.append(tr.getSrc()).append("->");
                                    lastNum = tr.getSrc();
                                }
                            }


                            totalDistance = totalDistance + tr.getRouteIntegralMileage();

                            if (currentNode == tr.getDst()) {
                                if (durationEndTime == tr.getRouteEndTime()) {
                                    points.append(tr.getDst());
                                    handleJournalDescV3(journalDescV3Map, points.toString(), totalDistance, totalDuration);
                                    computeFlag = 0;
                                    durationFlag = 0;
                                    totalDuration = 0;
                                    totalDistance = 0;
                                    lastNum = -1;
                                    points = new StringBuffer();
                                    break;//跳出内循环
                                } else {
                                    //应该不存在这样情况
                                }
                            } else {
                                if (lastNum != tr.getDst()) {
                                    points.append(tr.getDst()).append("->");
                                    lastNum = tr.getDst();
                                }
                            }
                        }
                    }
                }
            }
            num++;
        }

        LOGGER.debug("-----------打印所有趟程停靠点间行程--------------");
        for (Map.Entry<String, JournalEdge> entry : jes.entrySet()) {
            LOGGER.debug("Key = " + entry.getKey() + ", Value = " + entry.getValue().toString());
        }

        LOGGER.debug("-----------打印所有趟程描述--------------");
        //Map<String,JournalDescV3> journalDescV3Map = new HashMap<String,JournalDescV3>();
        Map<String, JournalDescV3> journalDescV3MapSorted = sortMapByKey(journalDescV3Map);    //按Key进行排序
        for (Map.Entry<String, JournalDescV3> entry : journalDescV3MapSorted.entrySet()) {
//            LOGGER.info("Key = " + entry.getKey() + ", Value = " + entry.getValue().toString());
            LOGGER.debug(entry.getValue().toString());
        }

        LOGGER.debug("-----------输出该车辆的总体平均运程和时长--------------");
        int allTotalDistance = 0;
        int allTotalDuration = 0;
        for (Map.Entry<String, JournalDescV3> entry : journalDescV3MapSorted.entrySet()) {
            JournalDescV3 jdv3 = entry.getValue();
            allTotalDistance = allTotalDistance + jdv3.getTotalDistance();
            allTotalDuration = allTotalDuration + jdv3.getTotalDuration();
        }

        double avgJournalDistance = 0;
        double avgJournalDuration = 0;
        for (Map.Entry<String, JournalDescV3> entry : journalDescV3MapSorted.entrySet()) {
            JournalDescV3 jdv3 = entry.getValue();
            avgJournalDistance = avgJournalDistance + ((double) jdv3.getTotalDistance() / jdv3.getTcTimes()) * ((double) jdv3.getTotalDistance() / allTotalDistance);
        }
        LOGGER.debug("avgJournalDistance=" + (int) avgJournalDistance);

        for (Map.Entry<String, JournalDescV3> entry : journalDescV3MapSorted.entrySet()) {
            JournalDescV3 jdv3 = entry.getValue();
            avgJournalDuration = avgJournalDuration + ((double) jdv3.getTotalDuration() / jdv3.getTcTimes()) * ((double) jdv3.getTotalDuration() / allTotalDuration);
        }
        LOGGER.debug("avgJournalDuration=" + (int) avgJournalDuration);

        vehicleJournalBean.setAvgJournalDistance((int) avgJournalDistance);
        vehicleJournalBean.setAvgJournalDuration((int) avgJournalDuration);
        vehicleJournalBean.setJournalVertexList(jvs);

        List<JournalEdge> jesList = jes.values().stream().collect(Collectors.toList());
        vehicleJournalBean.setJournalEdgeList(jesList);

//        List<JournalDescV3> jdsList = journalDescV3MapSorted.values().stream().collect(Collectors.toList());
        List<JournalDescV3> jdsList = new ArrayList(journalDescV3MapSorted.values());
        vehicleJournalBean.setJournalDescList(jdsList);

        vehicleJournalBean.setTid(tid);

        return vehicleJournalBean;
    }



    public static void main(String[] args) {
        Reader in = null;
        Iterable<CSVRecord> records = null;
        String tid = null;
        //read trip data start------------------------
        try {
            //百事车辆
            tid = "10019411330";
//            in = new FileReader("E:\\qingqidata\\10019411330\\201811\\10019411330-201811.csv");
            in = new FileReader("E:\\qingqidata\\10019411330\\10019411330驾驶行为分析(2018-11-07-00-00-00至2018-11-12-00-00-00).csv");
            //节油大赛车辆
//            tid = "10021042261";
//            in = new FileReader("E:\\qingqidata\\10021042261驾驶行为分析(2018-09-27-00-00-00至2018-09-29-00-00-00).csv");
            //随便找的一台车
//            tid = "10020435809";
//            in = new FileReader("E:\\qingqidata\\10020435809驾驶行为分析(2018-12-10-00-00-00至2018-12-12-00-00-00).csv");
            //随便找的一台of37车
//            tid = "10019410082";
//            in = new FileReader("E:\\qingqidata\\10019410082驾驶行为分析(2018-12-10-00-00-00至2018-12-12-00-00-00).csv");
            //随便找的一台of37车（14天发现闭环）
//            tid = "14705564807";
//            in = new FileReader("E:\\qingqidata\\14705564807\\14705564807驾驶行为分析(2018-12-04-00-00-00至2018-12-18-00-00-00).csv");
            //随便找的一台of37车
//            tid = "10021030292";
//            in = new FileReader("E:\\qingqidata\\10021030292\\result\\10021030292驾驶行为分析(2018-12-03-00-00-00至2018-12-11-00-00-00).csv");
//            in = new FileReader("E:\\qingqidata\\10021030292\\10021030292-201812.csv");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            LOGGER.error("FileNotFoundException");
        }

        try {
            records = CSVFormat.RFC4180.withFirstRecordAsHeader().parse(in);
        } catch (IOException e) {
            e.printStackTrace();
            LOGGER.error("IOException");
        }

        List<TripRawRecord> tripRawRecordList = new ArrayList<TripRawRecord>();
        for (CSVRecord record : records) {
            long routeStartLatitude = Long.parseLong(record.get("routeStartLatitude"));
            long routeStartLongitude = Long.parseLong(record.get("routeStartLongitude"));
            long routeEndLatitude = Long.parseLong(record.get("routeEndLatitude"));
            long routeEndLongitude = Long.parseLong(record.get("routeEndLongitude"));
            int routeIntegralMileage = Integer.parseInt(record.get("routeIntegralMileage"));
            int routeStartTime = Integer.parseInt(record.get("routeStartTime"));
            int routeEndTime = Integer.parseInt(record.get("routeEndTime"));
            int vehicleEstimatedLoad = Integer.parseInt(record.get("vehicleEstimatedLoad"));

            tripRawRecordList.add(new TripRawRecord(routeStartLatitude, routeStartLongitude, routeEndLatitude, routeEndLongitude, routeIntegralMileage, routeStartTime, routeEndTime,vehicleEstimatedLoad));
        }
        //read trip data end------------------------

        //调用模型并生成趟程
        VehicleJournalModelV5 vehicleJournalModel = new VehicleJournalModelV5();
        VehicleJournalBean vehicleJournalBean = vehicleJournalModel.generateJournal(tid,tripRawRecordList);
        LOGGER.info(vehicleJournalBean.toString());
//        LOGGER.info("---------------gson----------------");
//        Gson gson = new Gson();
//        LOGGER.info(gson.toJson(vehicleJournalBean));
//        String a = "{\"journalDescList\":[{\"points\":\"120328701625-\\u003e120328901612-\\u003e120329101601-\\u003e120328601586-\\u003e120329301580-\\u003e120329001579-\\u003e120328801593-\\u003e120329401603-\\u003e120328701625\",\"totalDuration\":65860,\"totalDistance\":972776,\"tcTimes\":1},{\"points\":\"120328701625-\\u003e120331101643-\\u003e120331101644-\\u003e120331201646-\\u003e120332301657-\\u003e120332301660-\\u003e120332801660-\\u003e120333801666-\\u003e120334201675-\\u003e120334301677-\\u003e120334401678-\\u003e120335701691-\\u003e120336201699-\\u003e120336601704-\\u003e120337101713-\\u003e120337101730-\\u003e120337301725-\\u003e120337301726-\\u003e120337401725-\\u003e120334401676-\\u003e120332901662-\\u003e120331001643-\\u003e120328701630-\\u003e120328701625\",\"totalDuration\":357350,\"totalDistance\":2958011,\"tcTimes\":1},{\"points\":\"120329101601-\\u003e120328701625-\\u003e120331101643-\\u003e120331101644-\\u003e120331201646-\\u003e120332301657-\\u003e120332301660-\\u003e120332801660-\\u003e120333801666-\\u003e120334201675-\\u003e120334301677-\\u003e120334401678-\\u003e120335701691-\\u003e120336201699-\\u003e120336601704-\\u003e120337101713-\\u003e120337101730-\\u003e120337301725-\\u003e120337301726-\\u003e120337401725-\\u003e120334401676-\\u003e120332901662-\\u003e120331001643-\\u003e120328701630-\\u003e120328701625-\\u003e120328901612-\\u003e120329101601\",\"totalDuration\":407264,\"totalDistance\":3415417,\"tcTimes\":1},{\"points\":\"120329301580-\\u003e120329301581-\\u003e120329101580-\\u003e120328601587-\\u003e120329101601-\\u003e120328701625-\\u003e120331101643-\\u003e120331101644-\\u003e120331201646-\\u003e120332301657-\\u003e120332301660-\\u003e120332801660-\\u003e120333801666-\\u003e120334201675-\\u003e120334301677-\\u003e120334401678-\\u003e120335701691-\\u003e120336201699-\\u003e120336601704-\\u003e120337101713-\\u003e120337101730-\\u003e120337301725-\\u003e120337301726-\\u003e120337401725-\\u003e120334401676-\\u003e120332901662-\\u003e120331001643-\\u003e120328701630-\\u003e120328701625-\\u003e120328901612-\\u003e120329101601-\\u003e120328601586-\\u003e120329301580\",\"totalDuration\":485822,\"totalDistance\":3999034,\"tcTimes\":1},{\"points\":\"120331101644-\\u003e120331201646-\\u003e120332301657-\\u003e120332301660-\\u003e120332801660-\\u003e120333801666-\\u003e120334201675-\\u003e120334301677-\\u003e120334401678-\\u003e120335701691-\\u003e120336201699-\\u003e120336601704-\\u003e120337101713-\\u003e120337101730-\\u003e120337301725-\\u003e120337301726-\\u003e120337401725-\\u003e120334401676-\\u003e120332901662-\\u003e120331001643-\\u003e120328701630-\\u003e120328701625-\\u003e120328901612-\\u003e120329101601-\\u003e120328601586-\\u003e120329301580-\\u003e120329001579-\\u003e120328801593-\\u003e120329401603-\\u003e120328701625-\\u003e120329201634-\\u003e120331101644\",\"totalDuration\":453066,\"totalDistance\":3931164,\"tcTimes\":1}],\"journalEdgeList\":[{\"src\":120329301581,\"dst\":120329101580,\"totalDistance\":52442,\"times\":1,\"totalDuration\":8734},{\"src\":120333801666,\"dst\":120334201675,\"totalDistance\":88194,\"times\":1,\"totalDuration\":7255},{\"src\":120326201694,\"dst\":120323301678,\"totalDistance\":346364,\"times\":1,\"totalDuration\":16783},{\"src\":120331101621,\"dst\":120331001620,\"totalDistance\":19862,\"times\":1,\"totalDuration\":1861},{\"src\":120337601776,\"dst\":120337501774,\"totalDistance\":28254,\"times\":1,\"totalDuration\":3875},{\"src\":120328701625,\"dst\":120331101643,\"totalDistance\":311651,\"times\":1,\"totalDuration\":15587},{\"src\":120329201634,\"dst\":120331101644,\"totalDistance\":222054,\"times\":1,\"totalDuration\":12879},{\"src\":120331101621,\"dst\":120331101621,\"totalDistance\":1374,\"times\":4,\"totalDuration\":1834},{\"src\":120332901662,\"dst\":120331001643,\"totalDistance\":282415,\"times\":1,\"totalDuration\":13540},{\"src\":120337601776,\"dst\":120337601776,\"totalDistance\":90,\"times\":1,\"totalDuration\":302},{\"src\":120332301660,\"dst\":120332801660,\"totalDistance\":38202,\"times\":1,\"totalDuration\":2918},{\"src\":120335701691,\"dst\":120335701691,\"totalDistance\":66,\"times\":1,\"totalDuration\":212},{\"src\":120323301682,\"dst\":120323201679,\"totalDistance\":40812,\"times\":1,\"totalDuration\":4346},{\"src\":120337101730,\"dst\":120337301725,\"totalDistance\":43946,\"times\":1,\"totalDuration\":3440},{\"src\":120323201679,\"dst\":120323101679,\"totalDistance\":19431,\"times\":1,\"totalDuration\":4845},{\"src\":120333201740,\"dst\":120332001726,\"totalDistance\":210085,\"times\":1,\"totalDuration\":10370},{\"src\":120323301678,\"dst\":120323301678,\"totalDistance\":230,\"times\":4,\"totalDuration\":1830},{\"src\":120323101679,\"dst\":120323101679,\"totalDistance\":3098,\"times\":4,\"totalDuration\":1661},{\"src\":120332001726,\"dst\":120332001726,\"totalDistance\":74,\"times\":1,\"totalDuration\":343},{\"src\":120329001709,\"dst\":120327401698,\"totalDistance\":263790,\"times\":1,\"totalDuration\":14410},{\"src\":120329101601,\"dst\":120328701625,\"totalDistance\":229601,\"times\":1,\"totalDuration\":12113},{\"src\":120330001628,\"dst\":120330301627,\"totalDistance\":29514,\"times\":1,\"totalDuration\":2007},{\"src\":120330301627,\"dst\":120330701626,\"totalDistance\":43483,\"times\":1,\"totalDuration\":4152},{\"src\":120329301580,\"dst\":120329301580,\"totalDistance\":916,\"times\":7,\"totalDuration\":3413},{\"src\":120337001770,\"dst\":120335901765,\"totalDistance\":125861,\"times\":1,\"totalDuration\":7427},{\"src\":120337501774,\"dst\":120337001770,\"totalDistance\":60479,\"times\":1,\"totalDuration\":6128},{\"src\":120329301580,\"dst\":120329301581,\"totalDistance\":9831,\"times\":1,\"totalDuration\":3290},{\"src\":120329101580,\"dst\":120329101580,\"totalDistance\":0,\"times\":3,\"totalDuration\":5677},{\"src\":120329301581,\"dst\":120329301581,\"totalDistance\":471,\"times\":2,\"totalDuration\":3949},{\"src\":120329701580,\"dst\":120329701580,\"totalDistance\":113,\"times\":1,\"totalDuration\":136},{\"src\":120334201675,\"dst\":120334301677,\"totalDistance\":17352,\"times\":1,\"totalDuration\":1649},{\"src\":120323301678,\"dst\":120323301682,\"totalDistance\":40018,\"times\":1,\"totalDuration\":5099},{\"src\":120332801660,\"dst\":120333801666,\"totalDistance\":115658,\"times\":1,\"totalDuration\":8152},{\"src\":120329101601,\"dst\":120328601586,\"totalDistance\":135390,\"times\":1,\"totalDuration\":6649},{\"src\":120329801721,\"dst\":120329001709,\"totalDistance\":169861,\"times\":1,\"totalDuration\":11185},{\"src\":120334201761,\"dst\":120333201740,\"totalDistance\":247347,\"times\":1,\"totalDuration\":12635},{\"src\":120328701625,\"dst\":120328701625,\"totalDistance\":266,\"times\":2,\"totalDuration\":1678},{\"src\":120337101771,\"dst\":120337601776,\"totalDistance\":84177,\"times\":1,\"totalDuration\":8471},{\"src\":120335901765,\"dst\":120335601764,\"totalDistance\":40196,\"times\":1,\"totalDuration\":2433},{\"src\":120328601586,\"dst\":120329301580,\"totalDistance\":113757,\"times\":1,\"totalDuration\":6736},{\"src\":120337401725,\"dst\":120334401676,\"totalDistance\":631047,\"times\":1,\"totalDuration\":28934},{\"src\":120334801761,\"dst\":120334201761,\"totalDistance\":67694,\"times\":1,\"totalDuration\":5204},{\"src\":120330701626,\"dst\":120330701626,\"totalDistance\":2620,\"times\":1,\"totalDuration\":541},{\"src\":120337501774,\"dst\":120337501774,\"totalDistance\":276,\"times\":2,\"totalDuration\":881},{\"src\":120331001620,\"dst\":120331001621,\"totalDistance\":1202,\"times\":1,\"totalDuration\":627},{\"src\":120331001620,\"dst\":120331001620,\"totalDistance\":1910,\"times\":1,\"totalDuration\":464},{\"src\":120328901612,\"dst\":120329101601,\"totalDistance\":99260,\"times\":1,\"totalDuration\":4883},{\"src\":120337101730,\"dst\":120337101730,\"totalDistance\":2596,\"times\":9,\"totalDuration\":4968},{\"src\":120329201634,\"dst\":120329201634,\"totalDistance\":39,\"times\":1,\"totalDuration\":761},{\"src\":120323301682,\"dst\":120323301682,\"totalDistance\":4191,\"times\":1,\"totalDuration\":766},{\"src\":120330201587,\"dst\":120330201586,\"totalDistance\":566,\"times\":1,\"totalDuration\":2073},{\"src\":120329001579,\"dst\":120328801593,\"totalDistance\":134371,\"times\":1,\"totalDuration\":6911},{\"src\":120330201587,\"dst\":120330201587,\"totalDistance\":5178,\"times\":4,\"totalDuration\":11659},{\"src\":120330201586,\"dst\":120329701580,\"totalDistance\":69091,\"times\":1,\"totalDuration\":6087},{\"src\":120334401678,\"dst\":120335701691,\"totalDistance\":199956,\"times\":1,\"totalDuration\":16558},{\"src\":120328701625,\"dst\":120328901612,\"totalDistance\":128279,\"times\":1,\"totalDuration\":5850},{\"src\":120323701671,\"dst\":120323901669,\"totalDistance\":25626,\"times\":1,\"totalDuration\":2028},{\"src\":120330801609,\"dst\":120330101604,\"totalDistance\":106252,\"times\":1,\"totalDuration\":6735},{\"src\":120328701630,\"dst\":120328701630,\"totalDistance\":108,\"times\":3,\"totalDuration\":791},{\"src\":120325501653,\"dst\":120325501653,\"totalDistance\":0,\"times\":2,\"totalDuration\":2549},{\"src\":120330701626,\"dst\":120331101621,\"totalDistance\":79325,\"times\":1,\"totalDuration\":8102},{\"src\":120331101643,\"dst\":120331101644,\"totalDistance\":8173,\"times\":1,\"totalDuration\":1399},{\"src\":120337001770,\"dst\":120337001770,\"totalDistance\":4383,\"times\":1,\"totalDuration\":518},{\"src\":120329001579,\"dst\":120329001579,\"totalDistance\":319,\"times\":1,\"totalDuration\":381},{\"src\":120336201699,\"dst\":120336601704,\"totalDistance\":59532,\"times\":1,\"totalDuration\":5147},{\"src\":120332001726,\"dst\":120329801721,\"totalDistance\":253705,\"times\":1,\"totalDuration\":13395},{\"src\":120334401676,\"dst\":120332901662,\"totalDistance\":176884,\"times\":1,\"totalDuration\":7010},{\"src\":120331001621,\"dst\":120330801609,\"totalDistance\":111264,\"times\":1,\"totalDuration\":5679},{\"src\":120325501653,\"dst\":120325701652,\"totalDistance\":21959,\"times\":1,\"totalDuration\":2449},{\"src\":120329101580,\"dst\":120328601587,\"totalDistance\":135322,\"times\":1,\"totalDuration\":10210},{\"src\":120327901644,\"dst\":120329601629,\"totalDistance\":218027,\"times\":1,\"totalDuration\":13901},{\"src\":120337301726,\"dst\":120337301726,\"totalDistance\":656,\"times\":7,\"totalDuration\":3015},{\"src\":120327401698,\"dst\":120326201694,\"totalDistance\":167837,\"times\":1,\"totalDuration\":10294},{\"src\":120337301725,\"dst\":120337301726,\"totalDistance\":3061,\"times\":1,\"totalDuration\":798},{\"src\":120334301677,\"dst\":120334301677,\"totalDistance\":707,\"times\":1,\"totalDuration\":428},{\"src\":120329301580,\"dst\":120329001579,\"totalDistance\":37553,\"times\":1,\"totalDuration\":4206},{\"src\":120337301726,\"dst\":120337401725,\"totalDistance\":9572,\"times\":1,\"totalDuration\":1116},{\"src\":120335701691,\"dst\":120336201699,\"totalDistance\":127437,\"times\":1,\"totalDuration\":9957},{\"src\":120331001643,\"dst\":120328701630,\"totalDistance\":253799,\"times\":1,\"totalDuration\":13275},{\"src\":120329401603,\"dst\":120329401603,\"totalDistance\":0,\"times\":1,\"totalDuration\":439},{\"src\":120330101604,\"dst\":120330201587,\"totalDistance\":177492,\"times\":1,\"totalDuration\":14855},{\"src\":120337101713,\"dst\":120337101730,\"totalDistance\":190205,\"times\":1,\"totalDuration\":13860},{\"src\":120323901669,\"dst\":120325501653,\"totalDistance\":205944,\"times\":1,\"totalDuration\":12961},{\"src\":120334301677,\"dst\":120334401678,\"totalDistance\":17146,\"times\":1,\"totalDuration\":1899},{\"src\":120332301657,\"dst\":120332301660,\"totalDistance\":21048,\"times\":1,\"totalDuration\":2009},{\"src\":120330201586,\"dst\":120330201586,\"totalDistance\":4943,\"times\":9,\"totalDuration\":9459},{\"src\":120329601629,\"dst\":120330001628,\"totalDistance\":32679,\"times\":1,\"totalDuration\":1722},{\"src\":120323101679,\"dst\":120323701671,\"totalDistance\":96967,\"times\":1,\"totalDuration\":7581},{\"src\":120325701652,\"dst\":120325701652,\"totalDistance\":113,\"times\":1,\"totalDuration\":201},{\"src\":120335601764,\"dst\":120334801761,\"totalDistance\":85235,\"times\":1,\"totalDuration\":4611},{\"src\":120328701630,\"dst\":120328701625,\"totalDistance\":50292,\"times\":1,\"totalDuration\":3919},{\"src\":120323901669,\"dst\":120323901669,\"totalDistance\":585,\"times\":2,\"totalDuration\":1539},{\"src\":120336601704,\"dst\":120337101713,\"totalDistance\":110188,\"times\":1,\"totalDuration\":6371},{\"src\":120331201646,\"dst\":120332301657,\"totalDistance\":175432,\"times\":1,\"totalDuration\":14905},{\"src\":120328801593,\"dst\":120329401603,\"totalDistance\":108287,\"times\":1,\"totalDuration\":6066},{\"src\":120329401603,\"dst\":120328701625,\"totalDistance\":215017,\"times\":1,\"totalDuration\":10223},{\"src\":120331101644,\"dst\":120331201646,\"totalDistance\":22688,\"times\":1,\"totalDuration\":1823},{\"src\":120328601587,\"dst\":120329101601,\"totalDistance\":136404,\"times\":1,\"totalDuration\":7267},{\"src\":120331001621,\"dst\":120331001621,\"totalDistance\":15,\"times\":1,\"totalDuration\":131},{\"src\":120329701580,\"dst\":120329301580,\"totalDistance\":38901,\"times\":1,\"totalDuration\":3830},{\"src\":120325701652,\"dst\":120327901644,\"totalDistance\":216162,\"times\":1,\"totalDuration\":11349},{\"src\":120334201761,\"dst\":120334201761,\"totalDistance\":1696,\"times\":1,\"totalDuration\":285},{\"src\":120328701625,\"dst\":120329201634,\"totalDistance\":97842,\"times\":1,\"totalDuration\":4926}],\"journalVertexList\":[{\"lat\":23.608426,\"lng\":116.304743,\"tileNumber\":120337101771,\"timelist\":[\"1543894893:0\"]},{\"lat\":23.236995,\"lng\":116.774641,\"tileNumber\":120337601776,\"timelist\":[\"1543903364:1\",\"1543906045:0\",\"1543906347:1\",\"1543910769:0\"]},{\"lat\":23.387408,\"lng\":116.662831,\"tileNumber\":120337501774,\"timelist\":[\"1543914644:1\",\"1543915092:0\",\"1543915767:1\",\"1543943292:0\",\"1543943498:1\",\"1543945438:0\"]},{\"lat\":23.696153,\"lng\":116.240511,\"tileNumber\":120337001770,\"timelist\":[\"1543951566:1\",\"1543951670:0\",\"1543952188:1\",\"1543953514:0\"]},{\"lat\":24.098611,\"lng\":115.303981,\"tileNumber\":120335901765,\"timelist\":[\"1543960941:1\",\"1543962078:0\"]},{\"lat\":24.154198,\"lng\":114.976598,\"tileNumber\":120335601764,\"timelist\":[\"1543964511:1\",\"1543966421:0\"]},{\"lat\":24.415248,\"lng\":114.27901,\"tileNumber\":120334801761,\"timelist\":[\"1543971032:1\",\"1543971047:0\"]},{\"lat\":24.411308,\"lng\":113.798383,\"tileNumber\":120334201761,\"timelist\":[\"1543976251:1\",\"1543977986:0\",\"1543978271:1\",\"1543979171:0\"]},{\"lat\":26.093468,\"lng\":112.938775,\"tileNumber\":120333201740,\"timelist\":[\"1543991806:1\",\"1543993906:0\"]},{\"lat\":27.168363,\"lng\":111.862326,\"tileNumber\":120332001726,\"timelist\":[\"1544004276:1\",\"1544006055:0\",\"1544006398:1\",\"1544008186:0\"]},{\"lat\":27.581475,\"lng\":109.898723,\"tileNumber\":120329801721,\"timelist\":[\"1544021581:1\",\"1544022201:0\"]},{\"lat\":28.476355,\"lng\":109.190086,\"tileNumber\":120329001709,\"timelist\":[\"1544033386:1\",\"1544034243:0\"]},{\"lat\":29.33328,\"lng\":107.76833,\"tileNumber\":120327401698,\"timelist\":[\"1544048653:1\",\"1544049259:0\"]},{\"lat\":29.673933,\"lng\":106.777183,\"tileNumber\":120326201694,\"timelist\":[\"1544059553:1\",\"1544061080:0\"]},{\"lat\":30.862925,\"lng\":104.213126,\"tileNumber\":120323301678,\"timelist\":[\"1544077863:1\",\"1544085571:0\",\"1544085775:1\",\"1544141285:0\",\"1544141594:1\",\"1544142396:0\",\"1544142551:1\",\"1544149962:0\",\"1544151124:1\",\"1544152760:0\"]},{\"lat\":30.562326,\"lng\":104.179408,\"tileNumber\":120323301682,\"timelist\":[\"1544157859:1\",\"1544158588:0\",\"1544159354:1\",\"1544161638:0\"]},{\"lat\":30.793055,\"lng\":104.12861,\"tileNumber\":120323201679,\"timelist\":[\"1544165984:1\",\"1544235201:0\"]},{\"lat\":30.791161,\"lng\":104.00922,\"tileNumber\":120323101679,\"timelist\":[\"1544240046:1\",\"1544246728:0\",\"1544247010:1\",\"1544248270:0\",\"1544248506:1\",\"1544258148:0\",\"1544258364:1\",\"1544262073:0\",\"1544263000:1\",\"1544264556:0\"]},{\"lat\":31.41197,\"lng\":104.508761,\"tileNumber\":120323701671,\"timelist\":[\"1544272137:1\",\"1544272610:0\"]},{\"lat\":31.550588,\"lng\":104.68622,\"tileNumber\":120323901669,\"timelist\":[\"1544274638:1\",\"1544274727:0\",\"1544275705:1\",\"1544275821:0\",\"1544276382:1\",\"1544277311:0\"]},{\"lat\":32.722725,\"lng\":106.116433,\"tileNumber\":120325501653,\"timelist\":[\"1544290272:1\",\"1544296971:0\",\"1544297719:1\",\"1544311330:0\",\"1544313131:1\",\"1544316426:0\"]},{\"lat\":32.83081,\"lng\":106.29464,\"tileNumber\":120325701652,\"timelist\":[\"1544318875:1\",\"1544319034:0\",\"1544319235:1\",\"1544319665:0\"]},{\"lat\":33.401135,\"lng\":108.228438,\"tileNumber\":120327901644,\"timelist\":[\"1544331014:1\",\"1544332196:0\"]},{\"lat\":34.496965,\"lng\":109.713138,\"tileNumber\":120329601629,\"timelist\":[\"1544346097:1\",\"1544346910:0\"]},{\"lat\":34.539585,\"lng\":110.057205,\"tileNumber\":120330001628,\"timelist\":[\"1544348632:1\",\"1544350516:0\"]},{\"lat\":34.602088,\"lng\":110.326426,\"tileNumber\":120330301627,\"timelist\":[\"1544352523:1\",\"1544353645:0\"]},{\"lat\":34.67658,\"lng\":110.674155,\"tileNumber\":120330701626,\"timelist\":[\"1544357797:1\",\"1544361119:0\",\"1544361660:1\",\"1544390341:0\"]},{\"lat\":35.061398,\"lng\":111.008885,\"tileNumber\":120331101621,\"timelist\":[\"1544398443:1\",\"1544401554:0\",\"1544402157:1\",\"1544407713:0\",\"1544407891:1\",\"1544411966:0\",\"1544412170:1\",\"1544417901:0\",\"1544418750:1\",\"1544420143:0\"]},{\"lat\":35.118696,\"lng\":110.945266,\"tileNumber\":120331001620,\"timelist\":[\"1544422004:1\",\"1544422208:0\",\"1544422672:1\",\"1544423578:0\"]},{\"lat\":35.093441,\"lng\":110.955375,\"tileNumber\":120331001621,\"timelist\":[\"1544424205:1\",\"1544424569:0\",\"1544424700:1\",\"1544425496:0\"]},{\"lat\":35.895665,\"lng\":110.821458,\"tileNumber\":120330801609,\"timelist\":[\"1544431175:1\",\"1544432285:0\"]},{\"lat\":36.26647,\"lng\":110.151811,\"tileNumber\":120330101604,\"timelist\":[\"1544439020:1\",\"1544439153:0\"]},{\"lat\":37.461511,\"lng\":110.273498,\"tileNumber\":120330201587,\"timelist\":[\"1544454008:1\",\"1544456300:0\",\"1544458984:1\",\"1544460933:0\",\"1544463652:1\",\"1544464856:0\",\"1544466247:1\",\"1544467072:0\",\"1544471937:1\",\"1544472482:0\"]},{\"lat\":37.513578,\"lng\":110.265175,\"tileNumber\":120330201586,\"timelist\":[\"1544474555:1\",\"1544474836:0\",\"1544476421:1\",\"1544478151:0\",\"1544478765:1\",\"1544480871:0\",\"1544483453:1\",\"1544485767:0\",\"1544486472:1\",\"1544486804:0\",\"1544487082:1\",\"1544488422:0\",\"1544489566:1\",\"1544489717:0\",\"1544491393:1\",\"1544491466:0\",\"1544492116:1\",\"1544492220:0\",\"1544492445:1\",\"1544492622:0\"]},{\"lat\":37.987701,\"lng\":109.846656,\"tileNumber\":120329701580,\"timelist\":[\"1544498709:1\",\"1544498762:0\",\"1544498898:1\",\"1544502212:0\"]},{\"lat\":37.95335,\"lng\":109.488363,\"tileNumber\":120329301580,\"timelist\":[\"1544506042:1\",\"1544507249:0\",\"1544507640:1\",\"1544508723:0\",\"1544509190:1\",\"1544509462:0\",\"1544509908:1\",\"1544510747:0\",\"1544510879:1\",\"1544511603:0\",\"1544511821:1\",\"1544516007:0\",\"1545001829:1\",\"1545002039:0\",\"1545002436:1\",\"1545006052:0\",\"1545007414:1\",\"1545008062:0\"]},{\"lat\":37.885953,\"lng\":109.493191,\"tileNumber\":120329301581,\"timelist\":[\"1544519297:1\",\"1544520262:0\",\"1544521574:1\",\"1544522873:0\",\"1544525510:1\",\"1544526103:0\"]},{\"lat\":37.988135,\"lng\":109.290876,\"tileNumber\":120329101580,\"timelist\":[\"1544534837:1\",\"1544547824:0\",\"1544549820:1\",\"1544549993:0\",\"1544550880:1\",\"1544551011:0\",\"1544553805:1\",\"1544558866:0\"]},{\"lat\":37.509158,\"lng\":108.873326,\"tileNumber\":120328601587,\"timelist\":[\"1544569076:1\",\"1544570246:0\"]},{\"lat\":36.525448,\"lng\":109.326,\"tileNumber\":120329101601,\"timelist\":[\"1544577513:1\",\"1544580740:0\",\"1544988004:1\",\"1544988079:0\"]},{\"lat\":34.765471,\"lng\":108.906121,\"tileNumber\":120328701625,\"timelist\":[\"1544592853:1\",\"1544593992:0\",\"1544951342:1\",\"1544973912:0\",\"1544975414:1\",\"1544975925:0\",\"1544976101:1\",\"1544976791:0\",\"1545042651:1\",\"1545045781:0\"]},{\"lat\":33.433065,\"lng\":111.077785,\"tileNumber\":120331101643,\"timelist\":[\"1544609579:1\",\"1544609671:0\"]},{\"lat\":33.395403,\"lng\":111.086488,\"tileNumber\":120331101644,\"timelist\":[\"1544611070:1\",\"1544612531:0\",\"1545065597:1\"]},{\"lat\":33.254205,\"lng\":111.152348,\"tileNumber\":120331201646,\"timelist\":[\"1544614354:1\",\"1544618971:0\"]},{\"lat\":32.400878,\"lng\":112.126736,\"tileNumber\":120332301657,\"timelist\":[\"1544633876:1\",\"1544635064:0\"]},{\"lat\":32.214905,\"lng\":112.13169,\"tileNumber\":120332301660,\"timelist\":[\"1544637073:1\",\"1544637535:0\"]},{\"lat\":32.211483,\"lng\":112.500003,\"tileNumber\":120332801660,\"timelist\":[\"1544640453:1\",\"1544641115:0\"]},{\"lat\":31.737468,\"lng\":113.430838,\"tileNumber\":120333801666,\"timelist\":[\"1544649267:1\",\"1544649452:0\"]},{\"lat\":31.065198,\"lng\":113.768091,\"tileNumber\":120334201675,\"timelist\":[\"1544656707:1\",\"1544656913:0\"]},{\"lat\":30.93394,\"lng\":113.858161,\"tileNumber\":120334301677,\"timelist\":[\"1544658562:1\",\"1544659639:0\",\"1544660067:1\",\"1544662856:0\"]},{\"lat\":30.83771,\"lng\":113.992868,\"tileNumber\":120334401678,\"timelist\":[\"1544664755:1\",\"1544668558:0\"]},{\"lat\":29.863681,\"lng\":115.071815,\"tileNumber\":120335701691,\"timelist\":[\"1544685116:1\",\"1544685557:0\",\"1544685769:1\",\"1544687218:0\"]},{\"lat\":29.240211,\"lng\":115.551371,\"tileNumber\":120336201699,\"timelist\":[\"1544697175:1\",\"1544702007:0\"]},{\"lat\":28.92119,\"lng\":115.91223,\"tileNumber\":120336601704,\"timelist\":[\"1544707154:1\",\"1544707155:0\"]},{\"lat\":28.179845,\"lng\":116.301491,\"tileNumber\":120337101713,\"timelist\":[\"1544713526:1\",\"1544714581:0\"]},{\"lat\":26.88437,\"lng\":116.340818,\"tileNumber\":120337101730,\"timelist\":[\"1544728441:1\",\"1544744829:0\",\"1544745209:1\",\"1544747329:0\",\"1544748244:1\",\"1544750965:0\",\"1544751147:1\",\"1544753258:0\",\"1544754102:1\",\"1544754522:0\",\"1544755004:1\",\"1544755605:0\",\"1544755891:1\",\"1544757096:0\",\"1544757430:1\",\"1544758063:0\",\"1544758480:1\",\"1544763536:0\",\"1544764664:1\",\"1544764776:0\"]},{\"lat\":27.226175,\"lng\":116.515171,\"tileNumber\":120337301725,\"timelist\":[\"1544768216:1\",\"1544774311:0\"]},{\"lat\":27.201581,\"lng\":116.50053,\"tileNumber\":120337301726,\"timelist\":[\"1544775109:1\",\"1544778258:0\",\"1544778792:1\",\"1544779373:0\",\"1544779793:1\",\"1544831959:0\",\"1544832428:1\",\"1544836726:0\",\"1544837133:1\",\"1544851416:0\",\"1544851779:1\",\"1544852442:0\",\"1544852653:1\",\"1544862970:0\",\"1544863581:1\",\"1544863760:0\"]},{\"lat\":27.221101,\"lng\":116.56111,\"tileNumber\":120337401725,\"timelist\":[\"1544864876:1\",\"1544864963:0\"]},{\"lat\":31.016938,\"lng\":113.97753,\"tileNumber\":120334401676,\"timelist\":[\"1544893897:1\",\"1544894085:0\"]},{\"lat\":32.058521,\"lng\":112.645881,\"tileNumber\":120332901662,\"timelist\":[\"1544901095:1\",\"1544901496:0\"]},{\"lat\":33.475198,\"lng\":110.948328,\"tileNumber\":120331001643,\"timelist\":[\"1544915036:1\",\"1544915042:0\"]},{\"lat\":34.380826,\"lng\":108.915478,\"tileNumber\":120328701630,\"timelist\":[\"1544928317:1\",\"1544936808:0\",\"1544937164:1\",\"1544942591:0\",\"1544942792:1\",\"1544944872:0\",\"1544945106:1\",\"1544947423:0\"]},{\"lat\":35.741795,\"lng\":109.154853,\"tileNumber\":120328901612,\"timelist\":[\"1544982641:1\",\"1544983121:0\"]},{\"lat\":37.51038,\"lng\":108.874863,\"tileNumber\":120328601586,\"timelist\":[\"1544994728:1\",\"1544995093:0\"]},{\"lat\":38.038966,\"lng\":109.237898,\"tileNumber\":120329001579,\"timelist\":[\"1545012268:1\",\"1545014701:0\",\"1545015082:1\",\"1545015087:0\"]},{\"lat\":37.090083,\"lng\":109.070938,\"tileNumber\":120328801593,\"timelist\":[\"1545021998:1\",\"1545022851:0\"]},{\"lat\":36.315678,\"lng\":109.526716,\"tileNumber\":120329401603,\"timelist\":[\"1545028917:1\",\"1545031942:0\",\"1545032381:1\",\"1545032428:0\"]},{\"lat\":34.159731,\"lng\":109.39875,\"tileNumber\":120329201634,\"timelist\":[\"1545050707:1\",\"1545050777:0\",\"1545051538:1\",\"1545052718:0\"]}],\"avgJournalDistance\":3456803,\"avgJournalDuration\":417773,\"tid\":\"14705564807\"}";
//        VehicleJournalBean b = gson.fromJson(a,VehicleJournalBean.class);
//        LOGGER.info("TID:"+b.getTid());
    }
}
